package HomeWork241018;

import java.util.Scanner;

class Circle {
    private double radius;

    // 构造方法，将半径置 0
    public Circle() {
        this.radius = 0;
    }

    // 构造方法，创建 Circle 对象时将半径初始化为r
    public Circle(double r) {
        this.radius = r;
    }

    // 获得圆的半径值
    public double getRadius() {
        return radius;
    }

    // 修改圆的半径值
    public void setRadius(double r) {
        this.radius = r;
    }

    // 计算圆的周长
    public double getPerimeter() {
        return 2 * Math.PI * radius;
    }

    // 计算圆的面积
    public double getArea() {
        return Math.PI * radius * radius;
    }

    // 将圆的半径、圆的周长和圆的面积输出到屏幕
    public void disp() {
        System.out.println("Radius: " + radius);
        System.out.println("Perimeter: " + getPerimeter());
        System.out.println("Area: " + getArea());
    }
}

class Cylinder extends Circle {
    private double height;

    // 构造方法,创建对象时将圆半径初始化为r,高初始化为h
    public Cylinder(double r, double h) {
        super(r);
        this.height = h;
    }

    // 获得圆柱体的高
    public double getHeight() {
        return height;
    }

    // 设置圆柱体的高
    public void setHeight(double h) {
        this.height = h;
    }

    // 计算圆柱体的表面积
    @Override
    public double getArea() {
        // 底面积 + 侧面积
        return 2 * super.getArea() + getPerimeter() * height;
    }

    // 计算圆柱体的体积
    public double getVol() {
        return super.getArea() * height;
    }

    // 将圆柱体的体积输出到屏幕
    public void dispVol() {
        System.out.println("Volume: " + getVol());
    }
}

public class ShiYan07 {
    /*
    * 1、根据下面的要求实现圆类 Circle。
    (1) 圆类 Circle 的私有成员变量: radius , 表示圆的半径
    (2) 圆类 Circle 的方法成员:
    Circle(): 构造方法，将半径置 0
    Circle(double r): 构造方法，创建 Circle 对象时将半径初始化为r
    double getRadius():获得圆的半径值
    void setRadius(double r):修改圆的半径值
    double getPerimeter():计算圆的周长
    double getArea(): 计算圆的面积
    void disp(): 将圆的半径、圆的周长和圆的面积输出到屏幕

    2、由圆Circle类派生圆柱体类 Cylinder。要求如下：
    (1) 圆柱体类 Cylinder 的私有成员变量: height ，表示圆柱体的高。
    (2) 圆柱体类 Cylinder 的成员方:
    Cylinder(double r,double h): 构造方法,创建对象时将圆半径初始化为r,高初始化为h
    double getHeight():获得圆柱体的高
    void setHeight( double h):设置圆柱体的高
    double getArea(): 计算圆柱体的表面积
    double getVol(): 计算圆柱体的体积
    void dispVol():将圆柱体的体积输出到屏幕

    3、编写程序：
    (1)接收从键盘输入的两个数，分别做为圆的半径和圆柱体的高, 创建一个圆柱体对象。计算并输出圆柱体的体积。
    修改圆柱体底面圆的半径，重新计算并输出圆柱体的体积。
    * */

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter the radius of the circle:");
        double radius = scanner.nextDouble();
        System.out.println("Enter the height of the cylinder:");
        double height = scanner.nextDouble();

        Cylinder cylinder = new Cylinder(radius, height);
        cylinder.dispVol();

        System.out.println("Enter the new radius of the circle:");
        double newRadius = scanner.nextDouble();
        cylinder.setRadius(newRadius);
        cylinder.dispVol();

        scanner.close();
    }
}